package com.yjymm.commonsdk.common.util.encry;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Map;

/**
 * @author panhaoxiong
 * @date 2021-02-07 14:41
 *
 * aes加密
 */
public class AESEncryUtils {



    public static String encrypt(String content, String password) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者

        kgen.init(128, new SecureRandom(password.getBytes()));// 利用用户密码作为随机数初始化出
                                                                // 128位的key生产者
        //加密没关系，SecureRandom是生成安全随机数序列，password.getBytes()是种子，只要种子相同，序列就一样，所以解密只要有password就行

        SecretKey secretKey = kgen.generateKey();// 根据用户密码，生成一个密钥

        byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥，如果此密钥不支持编码，则返回
                                                        // null。

        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥

        Cipher cipher = Cipher.getInstance("AES");// 创建密码器

        byte[] byteContent = content.getBytes("utf-8");

        cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化为加密模式的密码器

        byte[] result = cipher.doFinal(byteContent);// 加密

        // TODO: 生成字符串乱码，需要配置一下base64
        return new String(result);
    }

    public static void main(String[] args) throws Exception {

        String content = "对面的楼上的男生，你们有女朋友吗？";
                 String password = "123456789";
                 System.out.println("加密之前：" + content);
                 System.out.println("加密后的内容：" + AESEncryUtils.encrypt(content, password));
    }
}
